﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;

class Father {
public:
	Father() {
		this->a = 10;
	}
	void func() {
		cout << "Father::func()" << endl;
	}
	void func(int a) {
		cout << "Father::func(int a)" << endl;
	}
public:
	int a;
};

class Son : public Father {
public:
	Son() {
		this->a = 20;
	}
	void func() {
		cout << "Son::func()" << endl;
	}
	void func(int a, int b) {
		cout << "Son::func(int a, int b)" << endl;
	}
public:
	int a; 
};

// 子类中有和父类同名的成员变量，不会覆盖父类的，而是隐藏父类的成员变量 
void test01() {
	Son son;  
	cout << son.a << endl; // 20 
	cout << sizeof(son) << endl; // 8 
	cout << son.Father::a << endl; // 10 通过作用域来访问被隐藏的父类成员变量 
}

// 
void test02() {
	Son son;
	son.func();
	// son.func(8); // 因为子类有和父类func名的同名函数，父类中的所有名为func的函数都被隐藏，需要使用作用域调用父类函数
	son.Father::func(8); 
}

int main()
{

	test01(); 

	system("pause");
	return EXIT_SUCCESS;
}